package com.yumi.common;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * 文件操作工具类
 */
public class FileUtils {

    /**
     * 获取桌面路径
     * @return 桌面路径字符串
     */
    public static String getDesktopPath() {
        return System.getProperty("user.home") + File.separator + "Desktop";
    }

    /**
     * 创建目录（如果不存在）
     * @param directoryPath 目录路径
     */
    public static void createDirectoryIfNotExists(String directoryPath) {
        File directory = new File(directoryPath);
        if (!directory.exists()) {
            directory.mkdirs();
        }
    }

    /**
     * 获取当前日期字符串（yyyy-MM-dd格式）
     * @return 当前日期字符串
     */
    public static String getCurrentDateString() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(new Date());
    }

    /**
     * 构建ZIP文件名
     * @param originalFilename 原始文件名
     * @param date 日期字符串
     * @return 构建好的ZIP文件名
     */
    public static String buildZipFilename(String originalFilename, String date) {
        String fileBaseName = originalFilename;
        int dotIndex = originalFilename.lastIndexOf('.');
        if (dotIndex > 0) {
            fileBaseName = originalFilename.substring(0, dotIndex);
        }
        return date + "_" + fileBaseName + ".zip";
    }

    /**
     * 将MultipartFile压缩并保存为ZIP文件
     * @param file 待压缩的文件
     * @param zipFilePath ZIP文件保存路径
     * @throws IOException IO异常
     */
    public static void compressAndSaveFile(MultipartFile file, String zipFilePath) throws IOException {
        try (FileOutputStream fos = new FileOutputStream(zipFilePath);
             ZipOutputStream zipOut = new ZipOutputStream(fos)) {

            String originalFilename = file.getOriginalFilename() != null ? file.getOriginalFilename() : "unknown_file";
            ZipEntry zipEntry = new ZipEntry(originalFilename);
            zipOut.putNextEntry(zipEntry);

            byte[] bytes = file.getBytes();
            zipOut.write(bytes, 0, bytes.length);
            zipOut.closeEntry();

            System.out.println("文件已压缩并保存到: " + zipFilePath);
        }
    }

    /**
     * 获取文件名（不含扩展名）
     * @param filename 完整文件名
     * @return 不含扩展名的文件名
     */
    public static String getFileNameWithoutExtension(String filename) {
        if (filename == null) {
            return "unknown_file";
        }
        int dotIndex = filename.lastIndexOf('.');
        if (dotIndex > 0) {
            return filename.substring(0, dotIndex);
        }
        return filename;
    }
}